package com.loong.web.gp4j.service.monitor;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.loong.web.gp4j.bean.vo.monitor.MemoryVo;
import com.loong.web.gp4j.bean.vo.monitor.SpaceVo;
import com.loong.web.suppert.collection.vo.ResultVo;
import com.loong.web.suppert.collection.vo.ResultVoFactory;

/**
 * 系统监控服务
 *
 * @author 张成轩
 */
@Service
public class MonitorService {

	/**
	 * 获取磁盘空间使用情况
	 * 
	 * @return 返回对象
	 */
	public ResultVo<?> space() {

		List<SpaceVo> vos = new LinkedList<SpaceVo>();
		// 获取磁盘分区列表
		File[] roots = File.listRoots();
		for (File file : roots) {
			SpaceVo vo = new SpaceVo();
			// 磁盘路径
			vo.setPath(file.getPath());
			// 磁盘总量
			vo.setTotal(file.getTotalSpace());
			// 磁盘空闲量
			vo.setFree(file.getFreeSpace());
			// 磁盘使用量
			vo.setUsed(vo.getTotal() - vo.getFree());
			vos.add(vo);
		}
		return ResultVoFactory.succ(vos);
	}

	/**
	 * 获取内存使用情况
	 * 
	 * @return 返回对象
	 */
	public ResultVo<?> memory() {

		MemoryVo vo = new MemoryVo();
		Runtime runtime = Runtime.getRuntime();
		// 最大内存占用空间
		vo.setMax(runtime.maxMemory());
		// 当前内存申请空间
		vo.setTotal(runtime.totalMemory());
		// 当前内存申请空余空间
		vo.setFree(runtime.freeMemory());
		// 当前已使用空间
		vo.setUsed(vo.getTotal() - vo.getFree());
		return ResultVoFactory.succ(vo);
	}
}
